一,方法的概念
概念:方法就是一个包含了功能所需要的执行语句的代码块
好处:
- 提高了代码的复用性
- 隐藏了功能的实现细节
二,方法的组成
1
2 public static void main (String[] args) {}
范围(权限)修饰符 其他的修饰符 返回类型 方法名 参数列表 方法体
- 范围(权限)修饰符:限定了方法的使用范围
- 其他的修饰符:static 静态的、final 最终的、abstract 抽象的、native 本地的、synchronized 同步的
- 返回类型:表示方法运行完毕后返回结果的数据类型
- 方法名
- 参数列表:表示方法在执行过程中需要的数据
- 方法体:方法中具体功能的实现
三,方法的调用
调用本类中的方法
1 方法名(参数);调用其他类中的方法
1
2
3
4
5 // 如果该方法被static修饰
该方法所在类的类名.方法名(参数);
// 如果该方法没有被static修饰
数据类型 对象名 = new 数据类型();
对象名.方法名(参数);
注:
- 方法被调用后会进入栈内存;方法运行完毕后会从栈内存中释放;栈内存的特点:
先进后出
- 方法的定义位置是在类中,其他方法之外的任意位置
- 方法只有在调用后才会执行
四,方法的参数
4.1 形式参数
定义方法时的参数列表叫形式参数,也叫形参
作用:限定了调用时,必须根据形参的个数、类型、顺序来传入参数
4.2 实际参数
调用方法时的参数列表叫实际参数,也叫实参
实参是真正参与运算的数据,实参会必须根据形参的个数、类型、顺序来传递给形参
注:
- 实参传递给形参时存在自动类型转换
- 实参可以是常量、变量、表达式、还可以是其他方法返回值
五,方法的返回类型
返回指的是方法在运行完毕后,会将运行的结果返回给调用者
返回类型是 void
表示这个方法没有返回值,这个方法在运行完毕后,不会将任何结果返回给调用者;
返回类型是void的方法可以使用
return
关键字来结束方法,此时return
的功能仅仅是结束方法而不能返回结果。返回类型不是 void
表示这个方法有返回值,返回的结果就是指定数据类型的值,这个方法在运行完毕后,会将结果返回给调用者;
此时这个方法必须有
return
,并且return
后必须跟上返回的结果,返回结果的类型与返回类型必须一致注:
- 一个方法的返回类型是什么可以看成这个方法就是这个类型的值
- 返回结果与返回类型存在自动类型转换
return关键字:
- 返回类型是void的方法,可以有return,也可以没有return,如果有return,return后一定不能有值,程序运行到return时会立即结束方法
- 返回类型不是void的方法,必须有return,以及返回的结果
六,参数和返回类型是引用数据类型
1
2
3
4
5
6
7
8
9
10
11 public static void main(String[] args) {
int i = 3;
f1(i);
System.out.println(i);// 3
}
public static void f1(int i){
System.out.println(i);// 3
i = 4;
System.out.println(i);// 4
}
1
2
3
4
5
6
7
8
9
10
11 public static void main(String[] args) {
int[] arr = {1,2,3};
System.out.println(arr);// arr的地址
f2(arr);// 传递了地址
System.out.println(arr[0]);// 4
}
public static void f2(int[] b){
System.out.println(b);// 接收了实参传递过来的地址,当前形参b的地址与实参arr的地址是同一个
b[0] = 4;// 对b数组中的元素进行了赋值,由于arr的地址与b的地址是同一个,所以也修改arr数组中的元素值
}
参数和返回类型是引用数据类型时,传递的都是地址
七,可变参数
格式:
1
2
3 public static 返回类型 方法名(数据类型...变量名){
方法体
}当传入实参时,可以传入任意多个指定类型的参数
特点:
- 可变参数的本质是数组
- 可变参数只能出现在参数列表的末尾
注:
1
2
3 public static void f1(String...a){
}
// 调用该方法时,可以传入一个String类型的数组,或者任意个String类型的值
1
2
3 public static void f1(String[]a){
}
// 调用该方法时,只能传入一个String类型的数组
八,方法的重载
概念:在同一个类中,多个方法具有相同的方法名,但参数列表不同就是方法的重载
方法名相同,参数列表不同
参数列表:个数不同、类型不同、顺序不同
好处:简化了方法名的定义,便于调用和记忆